package pers.ijfxu.testngext.utils;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * 处理目录、文件的工具类
 *
 * @author ijfxu
 * @since 2021/5/23 14:06
 */
public class PathUtils {
    /**
     * 获取执行目录下的文件
     *
     * @param filePath 文件相对路径
     * @return java.lang.String
     * @author ijfxu
     * @since 2021/1/27 14:06
     */
    public static String getResource(String filePath) {
        String classPath = decode(ClassLoader.getSystemResource("").getPath(), "UTF-8");
        return join(classPath, filePath);
    }

    /**
     * 路径拼接
     *
     * @param pathArr 路径数组
     * @return java.lang.String
     * @author ijfxu
     * @since 2021/1/27 14:06
     */
    public static String join(String... pathArr) {
        if (0 == pathArr.length) {
            return "";
        }

        StringBuilder datapath = new StringBuilder(pathArr[0]);

        if (datapath.toString().endsWith(File.separator)) {
            datapath = new StringBuilder(removeEndChar(datapath.toString()));
        }

        for (int i = 1; i < pathArr.length; i++) {
            datapath.append(File.separator).append(pathArr[i]);
        }

        return decode(datapath.toString(), "UTF-8");
    }

    /**
     * 删除字符串最后一个字符
     *
     * @param var 源字符串
     * @return java.lang.String
     * @author ijfxu
     * @since 2021/1/27 14:06
     */
    public static String removeEndChar(String var) {
        if (0 == var.length()) {
            return "";
        } else {
            return var.substring(0, var.length() - 1);
        }
    }

    /**
     * 获取文件夹下的以fileName开头的所有文件
     *
     * @param parentPath 文件夹绝对路径
     * @param fileName   测试方法名映射的测试数据文件名
     * @return java.lang.String
     * @author ijfxu
     * @since 2021/1/27 14:06
     */
    public static String getFileWithName(String parentPath, String fileName) {

        File pathFile = new File(parentPath);
        if (!parentPath.endsWith(File.separator)) {
            parentPath = parentPath + File.separator;
        }
        if (pathFile.exists()) {
            for (String file : Objects.requireNonNull(pathFile.list())) {
                if (file.startsWith(fileName)) {
                    return parentPath + file;
                }
            }
        }
        return null;
    }

    /**
     * 遍历文件夹下所有的文件
     *
     * @param parentPath 文件夹绝对路径
     * @author ijfxu
     * @since 2022/10/22 下午12:59
     */
    public static List<String> getFiles(String parentPath) {
        List<String> files = new ArrayList<>();
        File pathFile = new File(parentPath);
        if (!parentPath.endsWith(File.separator)) {
            parentPath = parentPath + File.separator;
        }
        if (pathFile.exists()) {
            for (String file : Objects.requireNonNull(pathFile.list())) {
                files.add(parentPath + file);
            }
            return files;
        }
        return null;
    }

    /**
     * 对中文路径进行编码转换
     *
     * @param s   路径字符串
     * @param enc 编码模式
     * @return java.lang.String
     * @author ijfxu
     * @since 2021/1/27 00:17
     * @since 2020/3/3 14:56
     */
    public static String decode(String s, String enc) {
        String result;

        try {
            result = URLDecoder.decode(s, enc);
        } catch (UnsupportedEncodingException e) {
            result = s;
            e.printStackTrace();
        }

        return result;
    }
}
